package hxy.bytecode.ioc;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * @author eric

原文 https://github.com/biezhi/java-bible/blob/master/ioc/3.myioc.md
完整的简单ioc参考
https://gitee.com/eric-tutorial/easy-ioc
 */
public class Test {

	public static void main(String[] args) throws Exception {
		//1. 通过类装载器获取Hero类对象  
		ClassLoader loader = Thread.currentThread().getContextClassLoader();   
		Class<?> clazz = loader.loadClass("hxy.bytecode.ioc.Hero");

        String name = clazz.getName();
        System.out.println(name);

        //2. 获取类的默认构造器对象并通过它实例化Hero
		Constructor<?> cons = clazz.getDeclaredConstructor((Class[])null);
//		下面怎么完全不需要定义类型，自动完成
		Hero hero = (Hero)cons.newInstance();
		
		//3. 通过反射方法设置属性  
		Method setBrand = clazz.getMethod("setName", String.class);
		setBrand.invoke(hero, "小鱼人");
		Method setColor = clazz.getMethod("setOutfit", String.class);
		setColor.invoke(hero, "爆裂魔杖");
		
		// 4. 运行方法
		hero.say();
	}
}